home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / prosrc.arc / GEMC15.C < prev    next >
C/C++ Source or Header  |  1987-10-05  |  3KB  |  166 lines

  1. /*------------------------------*/
  2. /*    includes        */
  3. /*------------------------------*/
  4.  
  5. #include "portab.h"                /* portable coding conv    */
  6. #include "machine.h"                /* machine depndnt conv    */
  7. #include "osbind.h"                /* BDOS defintions    */
  8. #include "gemdefs.h"
  9.  
  10. /*------------------------------*/
  11. /*    open_file         */
  12. /*------------------------------*/
  13.     WORD
  14. open_file(file_name)
  15.     BYTE    *file_name;
  16.     {
  17.     LONG    dos_hndl;
  18.  
  19.     FOREVER
  20.         {
  21.         dos_hndl = Fopen(file_name, 0);
  22.         if (dos_hndl >= 0)
  23.             return ((WORD) dos_hndl);
  24.         if ( !dos_error((WORD) dos_hndl) )
  25.             return (-1);
  26.         }
  27.  
  28.     return (-1);        /* Appease lint */
  29.     }
  30.  
  31. /*------------------------------*/
  32. /*    create_file         */
  33. /*------------------------------*/
  34.     WORD
  35. create_file(file_name)
  36.     BYTE    *file_name;
  37.     {
  38.     LONG    dos_hndl;
  39.  
  40.     FOREVER
  41.         {
  42.         dos_hndl = Fcreate(file_name, 0);
  43.         if (dos_hndl >= 0)
  44.             return ((WORD) dos_hndl);
  45.         if ( !dos_error((WORD) dos_hndl) )
  46.             return (-1);
  47.         }
  48.  
  49.     return (-1);        /* Appease lint */
  50.     }
  51.  
  52. /*------------------------------*/
  53. /*    dos_error         */
  54. /*------------------------------*/
  55.     WORD
  56. dos_error(tos_err)
  57.     WORD    tos_err;
  58.     {
  59.     WORD    f_ret;
  60.  
  61.     graf_mouse(ARROW, 0x0L);
  62.     if (tos_err > -50)
  63.         {
  64.         tos_err += 31;
  65.         tos_err = -tos_err;
  66.         }
  67.     f_ret = form_error(tos_err);
  68.     return (f_ret);
  69.     }
  70.  
  71. /*------------------------------*/
  72. /*    get_file         */
  73. /*------------------------------*/
  74.     WORD
  75. get_file(extnt, got_file)
  76.     BYTE    *extnt, *got_file;
  77.     {
  78.     WORD    butn, ii;
  79.     BYTE    tmp_path[64], tmp_name[13];
  80.  
  81.     tmp_name[0] = '\0';
  82.     tmp_path[0] = '\0';
  83.  
  84.     if (*got_file)
  85.         parse_fname(got_file, tmp_path, tmp_name, extnt);
  86.     if (!tmp_path[0])
  87.         get_path(&tmp_path[0], extnt);
  88.  
  89.     fsel_input(tmp_path, tmp_name, &butn);
  90.     if (butn)
  91.         {
  92.         strcpy(got_file, tmp_path);
  93.         for (ii = 0; got_file[ii] && got_file[ii] != '*'; ii++);
  94.         got_file[ii - 1] = '\0';
  95.         strcat (got_file, "\\");
  96.         strcat(got_file, tmp_name);
  97.         return (TRUE);
  98.         }
  99.     else
  100.         return (FALSE);
  101.     }
  102.  
  103. /*------------------------------*/
  104. /*    parse_fname         */
  105. /*------------------------------*/
  106.     VOID
  107. parse_fname(full, path, name, extnt)
  108.     BYTE    *full, *path, *name, *extnt;
  109.     {
  110.     WORD    i, j;
  111.     BYTE    *s, *d;
  112.  
  113.     for (i = strlen(full); i--; )        /* scan for end of path */
  114.         if (full[i] == '\\' || full[i] == ':')
  115.             break;
  116.     if (i == -1)
  117.         strcpy(name, full);        /* "Naked" file name */
  118.     else
  119.         {
  120.         strcpy(name, &full[i+1]);
  121.         for (s = full, d = path, j = 0; j++ < i + 1;
  122.             *d++ = *s++);
  123.         strcpy(&path[i+1], "*.");
  124.         strcat(path, extnt);
  125.         }
  126.     }
  127.  
  128. /*------------------------------*/
  129. /*    get_path         */
  130. /*------------------------------*/
  131.     VOID
  132. get_path(tmp_path, spec)
  133.     BYTE    *tmp_path, *spec;
  134.     {
  135.     WORD    cur_drv;
  136.  
  137.     cur_drv = Dgetdrv();
  138.     tmp_path[0] = cur_drv + 'A';
  139.     tmp_path[1] = ':';
  140.     Dgetpath(&tmp_path[2], 0);
  141.     if (strlen(tmp_path) > 3)
  142.         strcat(tmp_path, "\\");
  143.     else
  144.         tmp_path[2] = '\0';
  145.     strcat(tmp_path, "*.");
  146.     strcat(tmp_path, spec);
  147.     }
  148.  
  149. /*------------------------------*/
  150. /*    new_ext         */
  151. /*------------------------------*/
  152.     VOID
  153. new_ext(o_fname, n_fname, ext)
  154.     BYTE    *o_fname, *n_fname, *ext;
  155.     {
  156.     WORD    ii, jj;
  157.  
  158.     strcpy(n_fname, o_fname);
  159.     for (ii = (jj = strlen(n_fname)) - 1; ii && n_fname[ii] != '.'; ii--);
  160.     if (!ii)
  161.         n_fname[ii = jj] = '.';
  162.     strcpy(&n_fname[++ii], ext);
  163.     }
  164.  
  165.  
  166.